<?php
use Workerman\Worker;
//载入composer
require_once __DIR__ . '/../boot/start.php';

/*
 // https的情况下配置和使用证书
 $context = array(
 'ssl' => array(
 'local_cert' => '/etc/nginx/conf.d/ssl/server.pem', // 也可以是crt文件
 'local_pk'   => '/etc/nginx/conf.d/ssl/server.key',
 )
 );
$worker = new Worker('http://0.0.0.0:443', $context);
 // 设置transport开启ssl，websocket+ssl即wss
 $worker->transport = 'ssl';
 */

$http_worker = new Worker("http://0.0.0.0:8000");

$http_worker->count     = 8;// 设置当前Worker实例启动多少个进程，不设置时默认为1。
$http_worker->name      = 'XyanHttp';// 设置当前Worker实例的名称，方便运行status命令时识别进程。不设置时默认为none。
$http_worker->transport = 'tcp';// 设置当前Worker实例所使用的传输层协议，目前只支持3种(tcp、udp、ssl)。不设置默认为tcp
$http_worker->reusePort = true;// 设置当前worker是否开启监听端口复用(socket的SO_REUSEPORT选项) 开启监听端口复用后允许多个无亲缘关系的进程监听相同的端口，并且由系统内核做负载均衡，决定将socket连接交给哪个进程处理，避免了惊群效应，可以提升多进程短连接应用的性能。3.5.21版本开始默认开启此选项;PHP版本>=7.0
$http_worker->user      = 'www';// 设置当前Worker实例以哪个用户运行。此属性只有当前用户为root时才能生效。不设置时默认以当前用户运行。

// 设置Worker启动时的回调函数，即当Worker启动后立即执行Worker::onWorkerStart成员指定的回调函数
$http_worker->onWorkerStart  = ['\\kernel\\Http', 'onWorkerStart'];
// 当连接建立时触发的回调函数。每个连接只会触发一次onConnect回调。
$http_worker->onConnect      = ['\\kernel\\Http', 'onConnect'];
// 当有客户端的连接上有数据发来时触发
$http_worker->onMessage      = ['\\kernel\\Http', 'onMessage'];
// 当连接断开时触发的回调函数。不管连接是如何断开的，只要断开就会触发onClose。每个连接只会触发一次onClose。
$http_worker->onClose        = ['\\kernel\\Http', 'onClose'];
// 设置Workert停止时的回调函数，即当Worker收到stop信号后执行Worker::onWorkerStop指定的回调函数
$http_worker->onWorkerStop   = ['\\kernel\\Http', 'onWorkerStop'];
// 设置Worker收到reload信号后执行的回调
$http_worker->onWorkerReload = ['\\kernel\\Http', 'onWorkerReload'];
// 每个连接都有一个单独的应用层发送缓冲区，缓冲区大小由TcpConnection::$maxSendBufferSize决定，默认值为1MB，可以手动设置更改大小，更改后会对所有连接生效。
$http_worker->onBufferFull   = ['\\kernel\\Http', 'onBufferFull'];
// 该回调在应用层发送缓冲区数据全部发送完毕后触发。一般与onBufferFull配合使用，例如在onBufferFull时停止向对端继续send数据，在onBufferDrain恢复写入数据。
$http_worker->onBufferDrain  = ['\\kernel\\Http', 'onBufferDrain'];
// 当客户端的连接上发生错误时触发
$http_worker->onError        = ['\\kernel\\Http', 'onError'];

Worker::runAll();